package com.xm.controller;

import com.xm.pojo.R;
import com.xm.pojo.User;
import com.xm.pojo.account;
import com.xm.pojo.product;
import com.xm.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/Users")
@CrossOrigin
public class userController {

    @Autowired
    private userService userService;


    /*登录 嘿1嘿嘿嘿  git更新测试*/
    @GetMapping("/login/{userName}/{pwd}")
    public R login(@PathVariable String userName, @PathVariable String pwd){
        User user=userService.login(userName);
        if(user!=null){
            if(pwd.equals(user.getPwd())){
                user.setAccount(new account(userService.remainder(user.getUserName()),userService.recharge(user.getUserName()),userService.consume(user.getUserName())));
                boolean flag=userService.updateUser(user);//修改登陆时间
                return R.OK().errorMsg("登录成功!").data("user",user);
            }else{
                return R.ERROR().errorMsg("账号密码不匹配!");
            }
        }else{
            return R.ERROR().errorMsg("用户不存在!");
        }
    }

    @PostMapping("/zhuce/{userName}/{pwd}/{nickName}")
    public R zhuce(@PathVariable String userName,@PathVariable String pwd,@PathVariable String nickName){
        //根据用户输入的账号查询数据库是否存在该用户
        User user=userService.login(userName);
        if(user!=null){//用户存在，返回提示信息
            return R.ERROR().errorMsg("用户已存在");
        }else{
            //用户不存在，添加用户
            boolean flag=userService.zhuce(userName,pwd,nickName);
            if(flag){
                //用户新增成功，添加用户钱包
                boolean flags=userService.insertAccount(userName,0,"注册赠送");
                if(flags){//钱包信息添加成功，返回成功信息
                    User u=userService.login(userName);
                    return R.OK().errorMsg("注册成功!").data("user",u);
                }else{//钱包信息添加失败
                    return R.ERROR().errorMsg("注册失败!");
                }
            }else{//用户注册失败，返回失败信息
                return R.ERROR().errorMsg("注册失败!");
            }
        }
    }

    /*展示用户收藏列表*/
    @GetMapping("/wishlist/{userId}")
    public R wishlist(@PathVariable int userId){
        List<product> list=userService.wishlist(userId);
        if(list.size()>0){
            return R.OK().errorMsg("收藏列表展示成功！").data("wishlist",list);
        }else{
            return R.OK().errorMsg("暂无收藏！");
        }
    }

    /*删除用户收藏（单个）*/
    @DeleteMapping("/delWishInfo/{productId}/{userId}")
    public R delWishInfo(@PathVariable int productId,@PathVariable int userId){
        boolean flag=userService.delWishInfo(productId,userId);
        if(flag){
            return R.OK().errorMsg("已删除收藏！");
        }else{
            return R.OK().errorMsg("删除收藏失败！");
        }
    }
    /*删除用户收藏（多个）*/
    @DeleteMapping("/delWishInfo/{userId}")
    public R delWishInfoAll(@PathVariable int userId,@RequestBody int[] productIds){
        boolean flag=true;
        for(int i=0;i<productIds.length;i++){
            boolean delFlag=userService.delWishInfo(productIds[i],userId);
            if(!delFlag){
                flag=false;
                break;
            }
        }
        if(flag){
            return R.OK().errorMsg("已删除收藏！");
        }else{
            return R.OK().errorMsg("删除收藏失败！");
        }
    }
    /*删除用户收藏（全部）*/
    @DeleteMapping("/delWish/{userId}")
    public R delWishInfo(@PathVariable int userId){
        boolean flag=userService.delWish(userId);
        if(flag){
            return R.OK().errorMsg("已删除全部收藏！");
        }else{
            return R.OK().errorMsg("删除收藏失败！");
        }
    }
    /*新增用户收藏*/
    @PostMapping("/addWish/{productId}/{userId}")
    public R addWish(@PathVariable int productId,@PathVariable int userId){
        boolean flag=userService.addWish(productId,userId);
        if(flag){
            return R.OK().errorMsg("已添加收藏！");
        }else{
            return R.OK().errorMsg("收藏失败！");
        }
    }

    /*购物车列表*/
    @GetMapping("/carInfo/{userId}")
    public R carInfo(@PathVariable int userId){
        List<product> list=userService.carInfo(userId);
        if(list.size()>0){
            return R.OK().errorMsg("购物车列表展示成功！").data("wishlist",list);
        }else{
            return R.OK().errorMsg("暂无商品！");
        }
    }
    /*新增购物车
    * productId商品id
    * userId用户id
    * quantity 数量
    * skuId 选项id
    * */
    @PostMapping("/addcar/{productId}/{userId}/{quantity}/{skuId}")
    public R addcar(@PathVariable int productId,@PathVariable int userId,@PathVariable int quantity,@PathVariable int skuId){
        product product=userService.isCar(userId,productId,skuId);//判断购物车是否存在该商品
        boolean flag;
        if(product!=null){
            //已存在该商品，增加数量
            flag=userService.updateCar(product.getQuantity()+quantity,userId,productId,skuId);
        }else{
            flag=userService.addCar(productId,userId,quantity,skuId);
        }
        if(flag){
            return R.OK().errorMsg("购物车添加成功！");
        }else{
            return R.OK().errorMsg("添加至购物车失败！");
        }
    }

    /*x修改购物车数量
    * quantity  修改后数量
    * userId 用户id
    * productId  商品id
    * skuId  商品选项id
    * */
    @PutMapping("/updateCar/{quantity}/{userId}/{productId}/{skuId}")
    public R updateCar(@PathVariable int quantity,@PathVariable int userId,@PathVariable int productId,@PathVariable int skuId){
        boolean flag=userService.updateCar(quantity,userId,productId,skuId);
        if(flag){
            return R.OK().errorMsg("成功！");
        }else{
            return R.OK().errorMsg("失败！");
        }
    }

    /* 删除购物车（单个）
     * productId商品id
     * userId用户id
     * skuId 商品选项id
     * */
    @DeleteMapping("/delCarInfo/{productId}/{userId}/{skuId}")
    public R delCarInfo(@PathVariable int productId,@PathVariable int userId,@PathVariable int skuId){
        boolean flag=userService.delCarInfo(productId,userId,skuId);
        if(flag){
            return R.OK().errorMsg("已删除该商品！");
        }else{
            return R.ERROR().errorMsg("删除失败!");
        }
    }

    /* 删除购物车（多个）
     * productId商品id(数组)
     * userId用户id
     * skuId 商品选项id（数组）
     * */
    @DeleteMapping("/delCarInfo")
    public R delCarInfo(@RequestBody int[] ids){
        boolean flag=true;
        for(int i=0;i<ids.length;i++){
            boolean delFlag=userService.deleteCar(ids[i]);
            if(!delFlag){
                flag=false;
                break;
            }
        }
        if(flag){
            return R.OK().errorMsg("已删除商品！");
        }else{
            return R.ERROR().errorMsg("删除失败!");
        }
    }
    /* 删除购物车（全部）
     * userId用户id
     * */
    @DeleteMapping("/delCarAll/{userId}")
    public R delCarInfo(@PathVariable int userId){
        boolean flag=userService.delUserCarInfo(userId);
        if(flag){
            return R.OK().errorMsg("已删除所有商品！");
        }else{
            return R.ERROR().errorMsg("删除失败!");
        }
    }

    /*修改用户信息1
    * 原密码  yuanPwd
    * 要修改的信息传到user
    * */
    @PutMapping("updateUser/{yuanPwd}")
    public R updateUser(@PathVariable String yuanPwd,@RequestBody User user){
        User yuanUser=userService.login(user.getUserName());
        if(yuanPwd.equals(yuanUser.getPwd())){
            if(user.getPwd().equals(yuanPwd)){
                return R.ERROR().errorMsg("新密码不能与原密码相同!").data("user",user);
            }else{
            boolean flag=userService.updateUser(user);
            if(flag){
                return R.OK().errorMsg("修改成功!").data("user",user);
            }else{
                return R.ERROR().errorMsg("修改失败!").data("user",user);
            }
            }
        }else{
            return R.ERROR().errorMsg("原密码错误!").data("user",user);
        }
    }

    /*
    *修改手机号
    */
    @PutMapping("/updateUserName/{userName}/{id}")
    public R updateUserName(@PathVariable String userName,@PathVariable int id) {
        User user = userService.userInfoId(id);//查询原用户信息
        User xinUser = userService.login(userName);//查询数据库中是否存在该手机号
        boolean flag;
        if (!ObjectUtils.isEmpty(xinUser)) {//判断根据想要修改的手机号是否有数据
            //有数据
            if(xinUser.getId()!=id){//判断是否是本身
                //不是本身,这手机号已存在
                return R.ERROR().errorMsg("该手机号已存在！");
            }else{
                //是本身
                flag = userService.updateUserName(userName,id);
                if(flag){
                    userService.updateAccountUserName(userName,user.getUserName());//修改手机号之后修改钱包中对应的用户名
                    return R.OK().errorMsg("修改成功");
                }else{
                    return R.ERROR().errorMsg("修改失败");
                }
            }
        } else {
            flag = userService.updateUserName(userName, id);//数据库不存在该手机号,修改手机号
            if(flag){
                String yuanuserName=user.getUserName();
                userService.updateAccountUserName(userName,yuanuserName);//修改手机号之后修改钱包中对应的用户名
                return R.OK().errorMsg("修改成功");
            }else{
                return R.ERROR().errorMsg("修改失败");
            }
        }
    }

}
